From: Adel Gadllah Date: Fri, 15 Feb 2013 15:09:44 +0000 (+0100) Subject: messageTray: Allow opening the context menu on long press X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~4818 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=186bd156ddda3fb9b9bf12c1e44b67b0bc24e222;p=gnome-shell.git messageTray: Allow opening the context menu on long press Right click does not work for touch devices, so support opening the menu using long press as well. https://bugzilla.gnome.org/show_bug.cgi?id=693887 --- diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index 8af765dfc..512cb53ad 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -1741,25 +1741,24 @@ const MessageTray = new Lang.Class({ this._updateNoMessagesLabel(); this._contextMenu = new MessageTrayContextMenu(this); - this._grabHelper.addActor(this._contextMenu.actor); - this.actor.connect('button-press-event', Lang.bind(this, function(actor, event) { - let button = event.get_button(); - if (button == 3) { - let [stageX, stageY] = event.get_coords(); - this._lock(); - this._contextMenu.setPosition(Math.round(stageX), Math.round(stageY)); - this._grabHelper.grab({ actor: this._contextMenu.actor, - grabFocus: true, - onUngrab: Lang.bind(this, function () { - this._unlock(); - this._contextMenu.close(); - }) - }); - this._contextMenu.open(); - } - else { - this._grabHelper.ungrab({ actor: this._contextMenu.actor }); + + let clickAction = new Clutter.ClickAction(); + this.actor.add_action(clickAction); + + clickAction.connect('clicked', Lang.bind(this, function(action) { + let button = action.get_button(); + if (button == 3) + this._openContextMenu(); + })); + + clickAction.connect('long-press', Lang.bind(this, function(action, actor, state) { + switch (state) { + case Clutter.LongPressState.QUERY: + return true; + case Clutter.LongPressState.ACTIVATE: + this._openContextMenu(); } + return false; })); this._contextMenu.actor.hide(); @@ -1767,6 +1766,20 @@ const MessageTray = new Lang.Class({ }, + _openContextMenu: function () { + let [x, y, mask] = global.get_pointer(); + this._lock(); + this._contextMenu.setPosition(Math.round(x), Math.round(y)); + this._grabHelper.grab({ actor: this._contextMenu.actor, + grabFocus: true, + onUngrab: Lang.bind(this, function () { + this._contextMenu.close(); + this._unlock(); + }) + }); + this._contextMenu.open(); + }, + close: function() { this._escapeTray(); },